#ifndef MODIFIABLE_H
#define MODIFIABLE_H

#include <ed_core/global/defs.h>

namespace ed_core
{

class Modifier;

class ED_CORE_API Modifiable
{
public:
  explicit Modifiable();
  virtual ~Modifiable();

  bool hasTag(const QString& t) const;
  bool hasTags(const QStringList& t) const;

  void addTag(const QString& t);
  bool removeTag(const QString& t);

  void apply(Modifier* mod, bool force=false);

protected:
  virtual void applyModifier(Modifier*)=0;

private:
  QSet<QString> _tags;
};

} // namespace ed_core

#endif // MODIFIABLE_H


